<!DOCTYPE HTML>
<!-- NewPage -->
<html lang="en">
<head><!-- start favicons snippet, use https://realfavicongenerator.net/ --><link rel="apple-touch-icon" sizes="180x180" href="/assets/apple-touch-icon.png"><link rel="icon" type="image/png" sizes="32x32" href="/assets/favicon-32x32.png"><link rel="icon" type="image/png" sizes="16x16" href="/assets/favicon-16x16.png"><link rel="manifest" href="/assets/site.webmanifest"><link rel="mask-icon" href="/assets/safari-pinned-tab.svg" color="#fc4d50"><link rel="shortcut icon" href="/assets/favicon.ico"><meta name="msapplication-TileColor" content="#ffc40d"><meta name="msapplication-config" content="/assets/browserconfig.xml"><meta name="theme-color" content="#ffffff"><!-- end favicons snippet -->
<title>ImaAdsLoader (ExoPlayer library)</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../../jquery/jquery-ui.css" title="Style">
<script type="text/javascript" src="../../../../../../script.js"></script>
<script type="text/javascript" src="../../../../../../jquery/jszip/dist/jszip.min.js"></script>
<script type="text/javascript" src="../../../../../../jquery/jszip-utils/dist/jszip-utils.min.js"></script>
<!--[if IE]>
<script type="text/javascript" src="../../../../../../jquery/jszip-utils/dist/jszip-utils-ie.min.js"></script>
<![endif]-->
<script type="text/javascript" src="../../../../../../jquery/jquery-3.5.1.js"></script>
<script type="text/javascript" src="../../../../../../jquery/jquery-ui.js"></script>
</head>
<body>
<script type="text/javascript"><!--
    try {
        if (location.href.indexOf('is-external=true') == -1) {
            parent.document.title="ImaAdsLoader (ExoPlayer library)";
        }
    }
    catch(err) {
    }
//-->
var data = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10};
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
var tableTab = "tableTab";
var activeTableTab = "activeTableTab";
var pathtoroot = "../../../../../../";
var useModuleDirectories = false;
loadScripts(document, 'script');</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<header role="banner">
<nav role="navigation">
<div class="fixedNav">
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a id="navbar.top">
<!--   -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a id="navbar.top.firstrow">
<!--   -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../../../index.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../../../../../allclasses.html">All&nbsp;Classes</a></li>
</ul>
<ul class="navListSearch">
<li><label for="search">SEARCH:</label>
<input type="text" id="search" value="search" disabled="disabled">
<input type="reset" id="reset" value="reset" disabled="disabled">
</li>
</ul>
<div>
<script type="text/javascript"><!--
  allClassesLink = document.getElementById("allclasses_navbar_top");
  if(window==top) {
    allClassesLink.style.display = "block";
  }
  else {
    allClassesLink.style.display = "none";
  }
  //-->
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a id="skip.navbar.top">
<!--   -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
</div>
<div class="navPadding">&nbsp;</div>
<script type="text/javascript"><!--
$('.navPadding').css('padding-top', $('.fixedNav').css("height"));
//-->
</script>
</nav>
</header>
<!-- ======== START OF CLASS DATA ======== -->
<main role="main">
<div class="header">
<div class="subTitle"><span class="packageLabelInType">Package</span>&nbsp;<a href="package-summary.html">com.google.android.exoplayer2.ext.ima</a></div>
<h2 title="Class ImaAdsLoader" class="title">Class ImaAdsLoader</h2>
</div>
<div class="contentContainer">
<ul class="inheritance">
<li><a href="https://developer.android.com/reference/java/lang/Object.html" title="class or interface in java.lang" class="externalLink" target="_top">java.lang.Object</a></li>
<li>
<ul class="inheritance">
<li>com.google.android.exoplayer2.ext.ima.ImaAdsLoader</li>
</ul>
</li>
</ul>
<div class="description">
<ul class="blockList">
<li class="blockList">
<dl>
<dt>All Implemented Interfaces:</dt>
<dd><code><a href="../../audio/AudioListener.html" title="interface in com.google.android.exoplayer2.audio">AudioListener</a></code>, <code><a href="../../device/DeviceListener.html" title="interface in com.google.android.exoplayer2.device">DeviceListener</a></code>, <code><a href="../../metadata/MetadataOutput.html" title="interface in com.google.android.exoplayer2.metadata">MetadataOutput</a></code>, <code><a href="../../Player.EventListener.html" title="interface in com.google.android.exoplayer2">Player.EventListener</a></code>, <code><a href="../../Player.Listener.html" title="interface in com.google.android.exoplayer2">Player.Listener</a></code>, <code><a href="../../source/ads/AdsLoader.html" title="interface in com.google.android.exoplayer2.source.ads">AdsLoader</a></code>, <code><a href="../../text/TextOutput.html" title="interface in com.google.android.exoplayer2.text">TextOutput</a></code>, <code><a href="../../video/VideoListener.html" title="interface in com.google.android.exoplayer2.video">VideoListener</a></code></dd>
</dl>
<hr>
<pre>public final class <span class="typeNameLabel">ImaAdsLoader</span>
extends <a href="https://developer.android.com/reference/java/lang/Object.html" title="class or interface in java.lang" class="externalLink" target="_top">Object</a>
implements <a href="../../Player.Listener.html" title="interface in com.google.android.exoplayer2">Player.Listener</a>, <a href="../../source/ads/AdsLoader.html" title="interface in com.google.android.exoplayer2.source.ads">AdsLoader</a></pre>
<div class="block"><a href="../../source/ads/AdsLoader.html" title="interface in com.google.android.exoplayer2.source.ads"><code>AdsLoader</code></a> using the IMA SDK. All methods must be called on the main thread.

 <p>The player instance that will play the loaded ads must be set before playback using <a href="#setPlayer(com.google.android.exoplayer2.Player)"><code>setPlayer(Player)</code></a>. If the ads loader is no longer required, it must be released by calling
 <a href="#release()"><code>release()</code></a>.

 <p>See https://developers.google.com/interactive-media-ads/docs/sdks/android/compatibility for
 information on compatible ad tag formats. Pass the ad tag URI when setting media item playback
 properties (if using the media item API) or as a <a href="../../upstream/DataSpec.html" title="class in com.google.android.exoplayer2.upstream"><code>DataSpec</code></a> when constructing the <a href="../../source/ads/AdsMediaSource.html" title="class in com.google.android.exoplayer2.source.ads"><code>AdsMediaSource</code></a> (if using media sources directly). For the latter case, please note that this
 implementation delegates loading of the data spec to the IMA SDK, so range and headers
 specifications will be ignored in ad tag URIs. Literal ads responses can be encoded as data
 scheme data specs, for example, by constructing the data spec using a URI generated via <a href="../../util/Util.html#getDataUriForString(java.lang.String,java.lang.String)"><code>Util.getDataUriForString(String, String)</code></a>.

 <p>The IMA SDK can report obstructions to the ad view for accurate viewability measurement. This
 means that any overlay views that obstruct the ad overlay but are essential for playback need to
 be registered via the <a href="../../ui/AdViewProvider.html" title="interface in com.google.android.exoplayer2.ui"><code>AdViewProvider</code></a> passed to the <a href="../../source/ads/AdsMediaSource.html" title="class in com.google.android.exoplayer2.source.ads"><code>AdsMediaSource</code></a>. See the <a href="https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/omsdk">IMA
 SDK Open Measurement documentation</a> for more information.</div>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- ======== NESTED CLASS SUMMARY ======== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="nested.class.summary">
<!--   -->
</a>
<h3>Nested Class Summary</h3>
<table class="memberSummary">
<caption><span>Nested Classes</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colSecond" scope="col">Class</th>
<th class="colLast" scope="col">Description</th>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static class&nbsp;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="ImaAdsLoader.Builder.html" title="class in com.google.android.exoplayer2.ext.ima">ImaAdsLoader.Builder</a></span></code></th>
<td class="colLast">
<div class="block">Builder for <a href="ImaAdsLoader.html" title="class in com.google.android.exoplayer2.ext.ima"><code>ImaAdsLoader</code></a>.</div>
</td>
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a id="nested.classes.inherited.from.class.com.google.android.exoplayer2.source.ads.AdsLoader">
<!--   -->
</a>
<h3>Nested classes/interfaces inherited from interface&nbsp;com.google.android.exoplayer2.source.ads.<a href="../../source/ads/AdsLoader.html" title="interface in com.google.android.exoplayer2.source.ads">AdsLoader</a></h3>
<code><a href="../../source/ads/AdsLoader.EventListener.html" title="interface in com.google.android.exoplayer2.source.ads">AdsLoader.EventListener</a></code></li>
</ul>
</li>
</ul>
</section>
<!-- ========== METHOD SUMMARY =========== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="method.summary">
<!--   -->
</a>
<h3>Method Summary</h3>
<table class="memberSummary">
<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colSecond" scope="col">Method</th>
<th class="colLast" scope="col">Description</th>
</tr>
<tr id="i0" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#focusSkipButton()">focusSkipButton</a></span>()</code></th>
<td class="colLast">
<div class="block">Moves UI focus to the skip button (or other interactive elements), if currently shown.</div>
</td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code>com.google.ads.interactivemedia.v3.api.AdDisplayContainer</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getAdDisplayContainer()">getAdDisplayContainer</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns the <code>AdDisplayContainer</code> used by this loader, or <code>null</code> if ads have not
 been requested yet.</div>
</td>
</tr>
<tr id="i2" class="altColor">
<td class="colFirst"><code>com.google.ads.interactivemedia.v3.api.AdsLoader</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getAdsLoader()">getAdsLoader</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns the underlying <code>AdsLoader</code> wrapped by this
 instance, or <code>null</code> if ads have not been requested yet.</div>
</td>
</tr>
<tr id="i3" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#handlePrepareComplete(com.google.android.exoplayer2.source.ads.AdsMediaSource,int,int)">handlePrepareComplete</a></span>&#8203;(<a href="../../source/ads/AdsMediaSource.html" title="class in com.google.android.exoplayer2.source.ads">AdsMediaSource</a>&nbsp;adsMediaSource,
                     int&nbsp;adGroupIndex,
                     int&nbsp;adIndexInAdGroup)</code></th>
<td class="colLast">
<div class="block">Notifies the ads loader that preparation of an ad media period is complete.</div>
</td>
</tr>
<tr id="i4" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#handlePrepareError(com.google.android.exoplayer2.source.ads.AdsMediaSource,int,int,java.io.IOException)">handlePrepareError</a></span>&#8203;(<a href="../../source/ads/AdsMediaSource.html" title="class in com.google.android.exoplayer2.source.ads">AdsMediaSource</a>&nbsp;adsMediaSource,
                  int&nbsp;adGroupIndex,
                  int&nbsp;adIndexInAdGroup,
                  <a href="https://developer.android.com/reference/java/io/IOException.html" title="class or interface in java.io" class="externalLink" target="_top">IOException</a>&nbsp;exception)</code></th>
<td class="colLast">
<div class="block">Notifies the ads loader that the player was not able to prepare media for a given ad.</div>
</td>
</tr>
<tr id="i5" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onPositionDiscontinuity(com.google.android.exoplayer2.Player.PositionInfo,com.google.android.exoplayer2.Player.PositionInfo,int)">onPositionDiscontinuity</a></span>&#8203;(<a href="../../Player.PositionInfo.html" title="class in com.google.android.exoplayer2">Player.PositionInfo</a>&nbsp;oldPosition,
                       <a href="../../Player.PositionInfo.html" title="class in com.google.android.exoplayer2">Player.PositionInfo</a>&nbsp;newPosition,
                       int&nbsp;reason)</code></th>
<td class="colLast">
<div class="block">Called when a position discontinuity occurs.</div>
</td>
</tr>
<tr id="i6" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onRepeatModeChanged(int)">onRepeatModeChanged</a></span>&#8203;(int&nbsp;repeatMode)</code></th>
<td class="colLast">
<div class="block">Called when the value of <a href="../../Player.html#getRepeatMode()"><code>Player.getRepeatMode()</code></a> changes.</div>
</td>
</tr>
<tr id="i7" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onShuffleModeEnabledChanged(boolean)">onShuffleModeEnabledChanged</a></span>&#8203;(boolean&nbsp;shuffleModeEnabled)</code></th>
<td class="colLast">
<div class="block">Called when the value of <a href="../../Player.html#getShuffleModeEnabled()"><code>Player.getShuffleModeEnabled()</code></a> changes.</div>
</td>
</tr>
<tr id="i8" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onTimelineChanged(com.google.android.exoplayer2.Timeline,int)">onTimelineChanged</a></span>&#8203;(<a href="../../Timeline.html" title="class in com.google.android.exoplayer2">Timeline</a>&nbsp;timeline,
                 int&nbsp;reason)</code></th>
<td class="colLast">
<div class="block">Called when the timeline has been refreshed.</div>
</td>
</tr>
<tr id="i9" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#release()">release</a></span>()</code></th>
<td class="colLast">
<div class="block">Releases the loader.</div>
</td>
</tr>
<tr id="i10" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#requestAds(com.google.android.exoplayer2.upstream.DataSpec,java.lang.Object,android.view.ViewGroup)">requestAds</a></span>&#8203;(<a href="../../upstream/DataSpec.html" title="class in com.google.android.exoplayer2.upstream">DataSpec</a>&nbsp;adTagDataSpec,
          <a href="https://developer.android.com/reference/java/lang/Object.html" title="class or interface in java.lang" class="externalLink" target="_top">Object</a>&nbsp;adsId,
          <a href="https://developer.android.com/reference/android/view/ViewGroup.html" title="class or interface in android.view" class="externalLink" target="_top">ViewGroup</a>&nbsp;adViewGroup)</code></th>
<td class="colLast">
<div class="block">Requests ads, if they have not already been requested.</div>
</td>
</tr>
<tr id="i11" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#setPlayer(com.google.android.exoplayer2.Player)">setPlayer</a></span>&#8203;(<a href="../../Player.html" title="interface in com.google.android.exoplayer2">Player</a>&nbsp;player)</code></th>
<td class="colLast">
<div class="block">Sets the player that will play the loaded ads.</div>
</td>
</tr>
<tr id="i12" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#setSupportedContentTypes(int...)">setSupportedContentTypes</a></span>&#8203;(int...&nbsp;contentTypes)</code></th>
<td class="colLast">
<div class="block">Sets the supported content types for ad media.</div>
</td>
</tr>
<tr id="i13" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#skipAd()">skipAd</a></span>()</code></th>
<td class="colLast">
<div class="block">Skips the current ad.</div>
</td>
</tr>
<tr id="i14" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#start(com.google.android.exoplayer2.source.ads.AdsMediaSource,com.google.android.exoplayer2.upstream.DataSpec,java.lang.Object,com.google.android.exoplayer2.ui.AdViewProvider,com.google.android.exoplayer2.source.ads.AdsLoader.EventListener)">start</a></span>&#8203;(<a href="../../source/ads/AdsMediaSource.html" title="class in com.google.android.exoplayer2.source.ads">AdsMediaSource</a>&nbsp;adsMediaSource,
     <a href="../../upstream/DataSpec.html" title="class in com.google.android.exoplayer2.upstream">DataSpec</a>&nbsp;adTagDataSpec,
     <a href="https://developer.android.com/reference/java/lang/Object.html" title="class or interface in java.lang" class="externalLink" target="_top">Object</a>&nbsp;adsId,
     <a href="../../ui/AdViewProvider.html" title="interface in com.google.android.exoplayer2.ui">AdViewProvider</a>&nbsp;adViewProvider,
     <a href="../../source/ads/AdsLoader.EventListener.html" title="interface in com.google.android.exoplayer2.source.ads">AdsLoader.EventListener</a>&nbsp;eventListener)</code></th>
<td class="colLast">
<div class="block">Starts using the ads loader for playback.</div>
</td>
</tr>
<tr id="i15" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#stop(com.google.android.exoplayer2.source.ads.AdsMediaSource,com.google.android.exoplayer2.source.ads.AdsLoader.EventListener)">stop</a></span>&#8203;(<a href="../../source/ads/AdsMediaSource.html" title="class in com.google.android.exoplayer2.source.ads">AdsMediaSource</a>&nbsp;adsMediaSource,
    <a href="../../source/ads/AdsLoader.EventListener.html" title="interface in com.google.android.exoplayer2.source.ads">AdsLoader.EventListener</a>&nbsp;eventListener)</code></th>
<td class="colLast">
<div class="block">Stops using the ads loader for playback and deregisters the event listener.</div>
</td>
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a id="methods.inherited.from.class.java.lang.Object">
<!--   -->
</a>
<h3>Methods inherited from class&nbsp;java.lang.<a href="https://developer.android.com/reference/java/lang/Object.html" title="class or interface in java.lang" class="externalLink" target="_top">Object</a></h3>
<code><a href="https://developer.android.com/reference/java/lang/Object.html#clone()" title="class or interface in java.lang" class="externalLink">clone</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang" class="externalLink">equals</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang" class="externalLink">finalize</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang" class="externalLink">getClass</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang" class="externalLink">hashCode</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang" class="externalLink">notify</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang" class="externalLink">notifyAll</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang" class="externalLink">toString</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang" class="externalLink">wait</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang" class="externalLink">wait</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#wait(long,int)" title="class or interface in java.lang" class="externalLink" target="_top">wait</a></code></li>
</ul>
<ul class="blockList">
<li class="blockList"><a id="methods.inherited.from.class.com.google.android.exoplayer2.Player.EventListener">
<!--   -->
</a>
<h3>Methods inherited from interface&nbsp;com.google.android.exoplayer2.<a href="../../Player.EventListener.html" title="interface in com.google.android.exoplayer2">Player.EventListener</a></h3>
<code><a href="../../Player.EventListener.html#onLoadingChanged(boolean)">onLoadingChanged</a>, <a href="../../Player.EventListener.html#onPlayerStateChanged(boolean,int)">onPlayerStateChanged</a>, <a href="../../Player.EventListener.html#onPositionDiscontinuity(int)">onPositionDiscontinuity</a>, <a href="../../Player.EventListener.html#onSeekProcessed()">onSeekProcessed</a>, <a href="../../Player.EventListener.html#onTimelineChanged(com.google.android.exoplayer2.Timeline,java.lang.Object,int)">onTimelineChanged</a></code></li>
</ul>
<ul class="blockList">
<li class="blockList"><a id="methods.inherited.from.class.com.google.android.exoplayer2.Player.Listener">
<!--   -->
</a>
<h3>Methods inherited from interface&nbsp;com.google.android.exoplayer2.<a href="../../Player.Listener.html" title="interface in com.google.android.exoplayer2">Player.Listener</a></h3>
<code><a href="../../Player.Listener.html#onAudioAttributesChanged(com.google.android.exoplayer2.audio.AudioAttributes)">onAudioAttributesChanged</a>, <a href="../../Player.Listener.html#onAudioSessionIdChanged(int)">onAudioSessionIdChanged</a>, <a href="../../Player.Listener.html#onAvailableCommandsChanged(com.google.android.exoplayer2.Player.Commands)">onAvailableCommandsChanged</a>, <a href="../../Player.Listener.html#onCues(java.util.List)">onCues</a>, <a href="../../Player.Listener.html#onDeviceInfoChanged(com.google.android.exoplayer2.device.DeviceInfo)">onDeviceInfoChanged</a>, <a href="../../Player.Listener.html#onDeviceVolumeChanged(int,boolean)">onDeviceVolumeChanged</a>, <a href="../../Player.Listener.html#onEvents(com.google.android.exoplayer2.Player,com.google.android.exoplayer2.Player.Events)">onEvents</a>, <a href="../../Player.Listener.html#onIsLoadingChanged(boolean)">onIsLoadingChanged</a>, <a href="../../Player.Listener.html#onIsPlayingChanged(boolean)">onIsPlayingChanged</a>, <a href="../../Player.Listener.html#onMediaItemTransition(com.google.android.exoplayer2.MediaItem,int)">onMediaItemTransition</a>, <a href="../../Player.Listener.html#onMediaMetadataChanged(com.google.android.exoplayer2.MediaMetadata)">onMediaMetadataChanged</a>, <a href="../../Player.Listener.html#onMetadata(com.google.android.exoplayer2.metadata.Metadata)">onMetadata</a>, <a href="../../Player.Listener.html#onPlaybackParametersChanged(com.google.android.exoplayer2.PlaybackParameters)">onPlaybackParametersChanged</a>, <a href="../../Player.Listener.html#onPlaybackStateChanged(int)">onPlaybackStateChanged</a>, <a href="../../Player.Listener.html#onPlaybackSuppressionReasonChanged(int)">onPlaybackSuppressionReasonChanged</a>, <a href="../../Player.Listener.html#onPlayerError(com.google.android.exoplayer2.ExoPlaybackException)">onPlayerError</a>, <a href="../../Player.Listener.html#onPlayWhenReadyChanged(boolean,int)">onPlayWhenReadyChanged</a>, <a href="../../Player.Listener.html#onRenderedFirstFrame()">onRenderedFirstFrame</a>, <a href="../../Player.Listener.html#onSkipSilenceEnabledChanged(boolean)">onSkipSilenceEnabledChanged</a>, <a href="../../Player.Listener.html#onStaticMetadataChanged(java.util.List)">onStaticMetadataChanged</a>, <a href="../../Player.Listener.html#onSurfaceSizeChanged(int,int)">onSurfaceSizeChanged</a>, <a href="../../Player.Listener.html#onTracksChanged(com.google.android.exoplayer2.source.TrackGroupArray,com.google.android.exoplayer2.trackselection.TrackSelectionArray)">onTracksChanged</a>, <a href="../../Player.Listener.html#onVideoSizeChanged(com.google.android.exoplayer2.video.VideoSize)">onVideoSizeChanged</a>, <a href="../../Player.Listener.html#onVolumeChanged(float)">onVolumeChanged</a></code></li>
</ul>
<ul class="blockList">
<li class="blockList"><a id="methods.inherited.from.class.com.google.android.exoplayer2.video.VideoListener">
<!--   -->
</a>
<h3>Methods inherited from interface&nbsp;com.google.android.exoplayer2.video.<a href="../../video/VideoListener.html" title="interface in com.google.android.exoplayer2.video">VideoListener</a></h3>
<code><a href="../../video/VideoListener.html#onVideoSizeChanged(int,int,int,float)">onVideoSizeChanged</a></code></li>
</ul>
</li>
</ul>
</section>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ============ METHOD DETAIL ========== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="method.detail">
<!--   -->
</a>
<h3>Method Detail</h3>
<a id="getAdsLoader()">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getAdsLoader</h4>
<pre class="methodSignature">@Nullable
public&nbsp;com.google.ads.interactivemedia.v3.api.AdsLoader&nbsp;getAdsLoader()</pre>
<div class="block">Returns the underlying <code>AdsLoader</code> wrapped by this
 instance, or <code>null</code> if ads have not been requested yet.</div>
</li>
</ul>
<a id="getAdDisplayContainer()">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getAdDisplayContainer</h4>
<pre class="methodSignature">@Nullable
public&nbsp;com.google.ads.interactivemedia.v3.api.AdDisplayContainer&nbsp;getAdDisplayContainer()</pre>
<div class="block">Returns the <code>AdDisplayContainer</code> used by this loader, or <code>null</code> if ads have not
 been requested yet.

 <p>Note: any video controls overlays registered via <code>BaseDisplayContainer.registerFriendlyObstruction(FriendlyObstruction)</code> will be unregistered
 automatically when the media source detaches from this instance. It is therefore necessary to
 re-register views each time the ads loader is reused. Alternatively, provide overlay views via
 the <a href="../../ui/AdViewProvider.html" title="interface in com.google.android.exoplayer2.ui"><code>AdViewProvider</code></a> when creating the media source to benefit from automatic
 registration.</div>
</li>
</ul>
<a id="requestAds(com.google.android.exoplayer2.upstream.DataSpec,java.lang.Object,android.view.ViewGroup)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>requestAds</h4>
<pre class="methodSignature">public&nbsp;void&nbsp;requestAds&#8203;(<a href="../../upstream/DataSpec.html" title="class in com.google.android.exoplayer2.upstream">DataSpec</a>&nbsp;adTagDataSpec,
                       <a href="https://developer.android.com/reference/java/lang/Object.html" title="class or interface in java.lang" class="externalLink" target="_top">Object</a>&nbsp;adsId,
                       @Nullable
                       <a href="https://developer.android.com/reference/android/view/ViewGroup.html" title="class or interface in android.view" class="externalLink" target="_top">ViewGroup</a>&nbsp;adViewGroup)</pre>
<div class="block">Requests ads, if they have not already been requested. Must be called on the main thread.

 <p>Ads will be requested automatically when the player is prepared if this method has not been
 called, so it is only necessary to call this method if you want to request ads before preparing
 the player.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>adTagDataSpec</code> - The data specification of the ad tag to load. See class javadoc for
     information about compatible ad tag formats.</dd>
<dd><code>adsId</code> - A opaque identifier for the ad playback state across start/stop calls.</dd>
<dd><code>adViewGroup</code> - A <a href="https://developer.android.com/reference/android/view/ViewGroup.html" title="class or interface in android.view" class="externalLink" target="_top"><code>ViewGroup</code></a> on top of the player that will show any ad UI, or <code>
     null</code> if playing audio-only ads.</dd>
</dl>
</li>
</ul>
<a id="skipAd()">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>skipAd</h4>
<pre class="methodSignature">public&nbsp;void&nbsp;skipAd()</pre>
<div class="block">Skips the current ad.

 <p>This method is intended for apps that play audio-only ads and so need to provide their own
 UI for users to skip skippable ads. Apps showing video ads should not call this method, as the
 IMA SDK provides the UI to skip ads in the ad view group passed via <a href="../../ui/AdViewProvider.html" title="interface in com.google.android.exoplayer2.ui"><code>AdViewProvider</code></a>.</div>
</li>
</ul>
<a id="focusSkipButton()">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>focusSkipButton</h4>
<pre class="methodSignature">public&nbsp;void&nbsp;focusSkipButton()</pre>
<div class="block">Moves UI focus to the skip button (or other interactive elements), if currently shown. See
 <code>BaseManager.focus()</code>.</div>
</li>
</ul>
<a id="setPlayer(com.google.android.exoplayer2.Player)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>setPlayer</h4>
<pre class="methodSignature">public&nbsp;void&nbsp;setPlayer&#8203;(@Nullable
                      <a href="../../Player.html" title="interface in com.google.android.exoplayer2">Player</a>&nbsp;player)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../source/ads/AdsLoader.html#setPlayer(com.google.android.exoplayer2.Player)">AdsLoader</a></code></span></div>
<div class="block">Sets the player that will play the loaded ads.

 <p>This method must be called before the player is prepared with media using this ads loader.

 <p>This method must also be called on the main thread and only players which are accessed on
 the main thread are supported (<code>player.getApplicationLooper() ==
 Looper.getMainLooper()</code>).</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../source/ads/AdsLoader.html#setPlayer(com.google.android.exoplayer2.Player)">setPlayer</a></code>&nbsp;in interface&nbsp;<code><a href="../../source/ads/AdsLoader.html" title="interface in com.google.android.exoplayer2.source.ads">AdsLoader</a></code></dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>player</code> - The player instance that will play the loaded ads. May be null to delete the
     reference to a previously set player.</dd>
</dl>
</li>
</ul>
<a id="setSupportedContentTypes(int...)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>setSupportedContentTypes</h4>
<pre class="methodSignature">public&nbsp;void&nbsp;setSupportedContentTypes&#8203;(<a href="../../C.ContentType.html" title="annotation in com.google.android.exoplayer2">@ContentType</a>
                                     int...&nbsp;contentTypes)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../source/ads/AdsLoader.html#setSupportedContentTypes(int...)">AdsLoader</a></code></span></div>
<div class="block">Sets the supported content types for ad media. Must be called before the first call to <a href="../../source/ads/AdsLoader.html#start(com.google.android.exoplayer2.source.ads.AdsMediaSource,com.google.android.exoplayer2.upstream.DataSpec,java.lang.Object,com.google.android.exoplayer2.ui.AdViewProvider,com.google.android.exoplayer2.source.ads.AdsLoader.EventListener)"><code>AdsLoader.start(AdsMediaSource, DataSpec, Object, AdViewProvider, EventListener)</code></a>. Subsequent calls may
 be ignored. Called on the main thread by <a href="../../source/ads/AdsMediaSource.html" title="class in com.google.android.exoplayer2.source.ads"><code>AdsMediaSource</code></a>.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../source/ads/AdsLoader.html#setSupportedContentTypes(int...)">setSupportedContentTypes</a></code>&nbsp;in interface&nbsp;<code><a href="../../source/ads/AdsLoader.html" title="interface in com.google.android.exoplayer2.source.ads">AdsLoader</a></code></dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>contentTypes</code> - The supported content types for ad media. Each element must be one of
     <a href="../../C.html#TYPE_DASH"><code>C.TYPE_DASH</code></a>, <a href="../../C.html#TYPE_HLS"><code>C.TYPE_HLS</code></a>, <a href="../../C.html#TYPE_SS"><code>C.TYPE_SS</code></a> and <a href="../../C.html#TYPE_OTHER"><code>C.TYPE_OTHER</code></a>.</dd>
</dl>
</li>
</ul>
<a id="start(com.google.android.exoplayer2.source.ads.AdsMediaSource,com.google.android.exoplayer2.upstream.DataSpec,java.lang.Object,com.google.android.exoplayer2.ui.AdViewProvider,com.google.android.exoplayer2.source.ads.AdsLoader.EventListener)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>start</h4>
<pre class="methodSignature">public&nbsp;void&nbsp;start&#8203;(<a href="../../source/ads/AdsMediaSource.html" title="class in com.google.android.exoplayer2.source.ads">AdsMediaSource</a>&nbsp;adsMediaSource,
                  <a href="../../upstream/DataSpec.html" title="class in com.google.android.exoplayer2.upstream">DataSpec</a>&nbsp;adTagDataSpec,
                  <a href="https://developer.android.com/reference/java/lang/Object.html" title="class or interface in java.lang" class="externalLink" target="_top">Object</a>&nbsp;adsId,
                  <a href="../../ui/AdViewProvider.html" title="interface in com.google.android.exoplayer2.ui">AdViewProvider</a>&nbsp;adViewProvider,
                  <a href="../../source/ads/AdsLoader.EventListener.html" title="interface in com.google.android.exoplayer2.source.ads">AdsLoader.EventListener</a>&nbsp;eventListener)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../source/ads/AdsLoader.html#start(com.google.android.exoplayer2.source.ads.AdsMediaSource,com.google.android.exoplayer2.upstream.DataSpec,java.lang.Object,com.google.android.exoplayer2.ui.AdViewProvider,com.google.android.exoplayer2.source.ads.AdsLoader.EventListener)">AdsLoader</a></code></span></div>
<div class="block">Starts using the ads loader for playback. Called on the main thread by <a href="../../source/ads/AdsMediaSource.html" title="class in com.google.android.exoplayer2.source.ads"><code>AdsMediaSource</code></a>.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../source/ads/AdsLoader.html#start(com.google.android.exoplayer2.source.ads.AdsMediaSource,com.google.android.exoplayer2.upstream.DataSpec,java.lang.Object,com.google.android.exoplayer2.ui.AdViewProvider,com.google.android.exoplayer2.source.ads.AdsLoader.EventListener)">start</a></code>&nbsp;in interface&nbsp;<code><a href="../../source/ads/AdsLoader.html" title="interface in com.google.android.exoplayer2.source.ads">AdsLoader</a></code></dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>adsMediaSource</code> - The ads media source requesting to start loading ads.</dd>
<dd><code>adTagDataSpec</code> - A data spec for the ad tag to load.</dd>
<dd><code>adsId</code> - An opaque identifier for the ad playback state across start/stop calls.</dd>
<dd><code>adViewProvider</code> - Provider of views for the ad UI.</dd>
<dd><code>eventListener</code> - Listener for ads loader events.</dd>
</dl>
</li>
</ul>
<a id="stop(com.google.android.exoplayer2.source.ads.AdsMediaSource,com.google.android.exoplayer2.source.ads.AdsLoader.EventListener)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>stop</h4>
<pre class="methodSignature">public&nbsp;void&nbsp;stop&#8203;(<a href="../../source/ads/AdsMediaSource.html" title="class in com.google.android.exoplayer2.source.ads">AdsMediaSource</a>&nbsp;adsMediaSource,
                 <a href="../../source/ads/AdsLoader.EventListener.html" title="interface in com.google.android.exoplayer2.source.ads">AdsLoader.EventListener</a>&nbsp;eventListener)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../source/ads/AdsLoader.html#stop(com.google.android.exoplayer2.source.ads.AdsMediaSource,com.google.android.exoplayer2.source.ads.AdsLoader.EventListener)">AdsLoader</a></code></span></div>
<div class="block">Stops using the ads loader for playback and deregisters the event listener. Called on the main
 thread by <a href="../../source/ads/AdsMediaSource.html" title="class in com.google.android.exoplayer2.source.ads"><code>AdsMediaSource</code></a>.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../source/ads/AdsLoader.html#stop(com.google.android.exoplayer2.source.ads.AdsMediaSource,com.google.android.exoplayer2.source.ads.AdsLoader.EventListener)">stop</a></code>&nbsp;in interface&nbsp;<code><a href="../../source/ads/AdsLoader.html" title="interface in com.google.android.exoplayer2.source.ads">AdsLoader</a></code></dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>adsMediaSource</code> - The ads media source requesting to stop loading/playing ads.</dd>
<dd><code>eventListener</code> - The ads media source's listener for ads loader events.</dd>
</dl>
</li>
</ul>
<a id="release()">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>release</h4>
<pre class="methodSignature">public&nbsp;void&nbsp;release()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../source/ads/AdsLoader.html#release()">AdsLoader</a></code></span></div>
<div class="block">Releases the loader. Must be called by the application on the main thread when the instance is
 no longer needed.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../source/ads/AdsLoader.html#release()">release</a></code>&nbsp;in interface&nbsp;<code><a href="../../source/ads/AdsLoader.html" title="interface in com.google.android.exoplayer2.source.ads">AdsLoader</a></code></dd>
</dl>
</li>
</ul>
<a id="handlePrepareComplete(com.google.android.exoplayer2.source.ads.AdsMediaSource,int,int)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>handlePrepareComplete</h4>
<pre class="methodSignature">public&nbsp;void&nbsp;handlePrepareComplete&#8203;(<a href="../../source/ads/AdsMediaSource.html" title="class in com.google.android.exoplayer2.source.ads">AdsMediaSource</a>&nbsp;adsMediaSource,
                                  int&nbsp;adGroupIndex,
                                  int&nbsp;adIndexInAdGroup)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../source/ads/AdsLoader.html#handlePrepareComplete(com.google.android.exoplayer2.source.ads.AdsMediaSource,int,int)">AdsLoader</a></code></span></div>
<div class="block">Notifies the ads loader that preparation of an ad media period is complete. Called on the main
 thread by <a href="../../source/ads/AdsMediaSource.html" title="class in com.google.android.exoplayer2.source.ads"><code>AdsMediaSource</code></a>.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../source/ads/AdsLoader.html#handlePrepareComplete(com.google.android.exoplayer2.source.ads.AdsMediaSource,int,int)">handlePrepareComplete</a></code>&nbsp;in interface&nbsp;<code><a href="../../source/ads/AdsLoader.html" title="interface in com.google.android.exoplayer2.source.ads">AdsLoader</a></code></dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>adsMediaSource</code> - The ads media source for which preparation of ad media completed.</dd>
<dd><code>adGroupIndex</code> - The index of the ad group.</dd>
<dd><code>adIndexInAdGroup</code> - The index of the ad in the ad group.</dd>
</dl>
</li>
</ul>
<a id="handlePrepareError(com.google.android.exoplayer2.source.ads.AdsMediaSource,int,int,java.io.IOException)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>handlePrepareError</h4>
<pre class="methodSignature">public&nbsp;void&nbsp;handlePrepareError&#8203;(<a href="../../source/ads/AdsMediaSource.html" title="class in com.google.android.exoplayer2.source.ads">AdsMediaSource</a>&nbsp;adsMediaSource,
                               int&nbsp;adGroupIndex,
                               int&nbsp;adIndexInAdGroup,
                               <a href="https://developer.android.com/reference/java/io/IOException.html" title="class or interface in java.io" class="externalLink" target="_top">IOException</a>&nbsp;exception)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../source/ads/AdsLoader.html#handlePrepareError(com.google.android.exoplayer2.source.ads.AdsMediaSource,int,int,java.io.IOException)">AdsLoader</a></code></span></div>
<div class="block">Notifies the ads loader that the player was not able to prepare media for a given ad.
 Implementations should update the ad playback state as the specified ad has failed to load.
 Called on the main thread by <a href="../../source/ads/AdsMediaSource.html" title="class in com.google.android.exoplayer2.source.ads"><code>AdsMediaSource</code></a>.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../source/ads/AdsLoader.html#handlePrepareError(com.google.android.exoplayer2.source.ads.AdsMediaSource,int,int,java.io.IOException)">handlePrepareError</a></code>&nbsp;in interface&nbsp;<code><a href="../../source/ads/AdsLoader.html" title="interface in com.google.android.exoplayer2.source.ads">AdsLoader</a></code></dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>adsMediaSource</code> - The ads media source for which preparation of ad media failed.</dd>
<dd><code>adGroupIndex</code> - The index of the ad group.</dd>
<dd><code>adIndexInAdGroup</code> - The index of the ad in the ad group.</dd>
<dd><code>exception</code> - The preparation error.</dd>
</dl>
</li>
</ul>
<a id="onTimelineChanged(com.google.android.exoplayer2.Timeline,int)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>onTimelineChanged</h4>
<pre class="methodSignature">public&nbsp;void&nbsp;onTimelineChanged&#8203;(<a href="../../Timeline.html" title="class in com.google.android.exoplayer2">Timeline</a>&nbsp;timeline,
                              <a href="../../Player.TimelineChangeReason.html" title="annotation in com.google.android.exoplayer2">@TimelineChangeReason</a>
                              int&nbsp;reason)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../Player.EventListener.html#onTimelineChanged(com.google.android.exoplayer2.Timeline,int)">Player.EventListener</a></code></span></div>
<div class="block">Called when the timeline has been refreshed.

 <p>Note that the current window or period index may change as a result of a timeline change.
 If playback can't continue smoothly because of this timeline change, a separate <a href="../../Player.EventListener.html#onPositionDiscontinuity(com.google.android.exoplayer2.Player.PositionInfo,com.google.android.exoplayer2.Player.PositionInfo,int)"><code>Player.EventListener.onPositionDiscontinuity(PositionInfo, PositionInfo, int)</code></a> callback will be triggered.

 <p><a href="../../Player.EventListener.html#onEvents(com.google.android.exoplayer2.Player,com.google.android.exoplayer2.Player.Events)"><code>Player.EventListener.onEvents(Player, Events)</code></a> will also be called to report this event along with
 other events that happen in the same <a href="https://developer.android.com/reference/android/os/Looper.html" title="class or interface in android.os" class="externalLink" target="_top"><code>Looper</code></a> message queue iteration.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../Player.EventListener.html#onTimelineChanged(com.google.android.exoplayer2.Timeline,int)">onTimelineChanged</a></code>&nbsp;in interface&nbsp;<code><a href="../../Player.EventListener.html" title="interface in com.google.android.exoplayer2">Player.EventListener</a></code></dd>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../Player.Listener.html#onTimelineChanged(com.google.android.exoplayer2.Timeline,int)">onTimelineChanged</a></code>&nbsp;in interface&nbsp;<code><a href="../../Player.Listener.html" title="interface in com.google.android.exoplayer2">Player.Listener</a></code></dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>timeline</code> - The latest timeline. Never null, but may be empty.</dd>
<dd><code>reason</code> - The <a href="../../Player.TimelineChangeReason.html" title="annotation in com.google.android.exoplayer2"><code>Player.TimelineChangeReason</code></a> responsible for this timeline change.</dd>
</dl>
</li>
</ul>
<a id="onPositionDiscontinuity(com.google.android.exoplayer2.Player.PositionInfo,com.google.android.exoplayer2.Player.PositionInfo,int)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>onPositionDiscontinuity</h4>
<pre class="methodSignature">public&nbsp;void&nbsp;onPositionDiscontinuity&#8203;(<a href="../../Player.PositionInfo.html" title="class in com.google.android.exoplayer2">Player.PositionInfo</a>&nbsp;oldPosition,
                                    <a href="../../Player.PositionInfo.html" title="class in com.google.android.exoplayer2">Player.PositionInfo</a>&nbsp;newPosition,
                                    <a href="../../Player.DiscontinuityReason.html" title="annotation in com.google.android.exoplayer2">@DiscontinuityReason</a>
                                    int&nbsp;reason)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../Player.EventListener.html#onPositionDiscontinuity(com.google.android.exoplayer2.Player.PositionInfo,com.google.android.exoplayer2.Player.PositionInfo,int)">Player.EventListener</a></code></span></div>
<div class="block">Called when a position discontinuity occurs.

 <p>A position discontinuity occurs when the playing period changes, the playback position
 jumps within the period currently being played, or when the playing period has been skipped
 or removed.

 <p><a href="../../Player.EventListener.html#onEvents(com.google.android.exoplayer2.Player,com.google.android.exoplayer2.Player.Events)"><code>Player.EventListener.onEvents(Player, Events)</code></a> will also be called to report this event along with
 other events that happen in the same <a href="https://developer.android.com/reference/android/os/Looper.html" title="class or interface in android.os" class="externalLink" target="_top"><code>Looper</code></a> message queue iteration.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../Player.EventListener.html#onPositionDiscontinuity(com.google.android.exoplayer2.Player.PositionInfo,com.google.android.exoplayer2.Player.PositionInfo,int)">onPositionDiscontinuity</a></code>&nbsp;in interface&nbsp;<code><a href="../../Player.EventListener.html" title="interface in com.google.android.exoplayer2">Player.EventListener</a></code></dd>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../Player.Listener.html#onPositionDiscontinuity(com.google.android.exoplayer2.Player.PositionInfo,com.google.android.exoplayer2.Player.PositionInfo,int)">onPositionDiscontinuity</a></code>&nbsp;in interface&nbsp;<code><a href="../../Player.Listener.html" title="interface in com.google.android.exoplayer2">Player.Listener</a></code></dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>oldPosition</code> - The position before the discontinuity.</dd>
<dd><code>newPosition</code> - The position after the discontinuity.</dd>
<dd><code>reason</code> - The <a href="../../Player.DiscontinuityReason.html" title="annotation in com.google.android.exoplayer2"><code>Player.DiscontinuityReason</code></a> responsible for the discontinuity.</dd>
</dl>
</li>
</ul>
<a id="onShuffleModeEnabledChanged(boolean)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>onShuffleModeEnabledChanged</h4>
<pre class="methodSignature">public&nbsp;void&nbsp;onShuffleModeEnabledChanged&#8203;(boolean&nbsp;shuffleModeEnabled)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../Player.EventListener.html#onShuffleModeEnabledChanged(boolean)">Player.EventListener</a></code></span></div>
<div class="block">Called when the value of <a href="../../Player.html#getShuffleModeEnabled()"><code>Player.getShuffleModeEnabled()</code></a> changes.

 <p><a href="../../Player.EventListener.html#onEvents(com.google.android.exoplayer2.Player,com.google.android.exoplayer2.Player.Events)"><code>Player.EventListener.onEvents(Player, Events)</code></a> will also be called to report this event along with
 other events that happen in the same <a href="https://developer.android.com/reference/android/os/Looper.html" title="class or interface in android.os" class="externalLink" target="_top"><code>Looper</code></a> message queue iteration.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../Player.EventListener.html#onShuffleModeEnabledChanged(boolean)">onShuffleModeEnabledChanged</a></code>&nbsp;in interface&nbsp;<code><a href="../../Player.EventListener.html" title="interface in com.google.android.exoplayer2">Player.EventListener</a></code></dd>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../Player.Listener.html#onShuffleModeEnabledChanged(boolean)">onShuffleModeEnabledChanged</a></code>&nbsp;in interface&nbsp;<code><a href="../../Player.Listener.html" title="interface in com.google.android.exoplayer2">Player.Listener</a></code></dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>shuffleModeEnabled</code> - Whether shuffling of windows is enabled.</dd>
</dl>
</li>
</ul>
<a id="onRepeatModeChanged(int)">
<!--   -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>onRepeatModeChanged</h4>
<pre class="methodSignature">public&nbsp;void&nbsp;onRepeatModeChanged&#8203;(<a href="../../Player.RepeatMode.html" title="annotation in com.google.android.exoplayer2">@RepeatMode</a>
                                int&nbsp;repeatMode)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../Player.EventListener.html#onRepeatModeChanged(int)">Player.EventListener</a></code></span></div>
<div class="block">Called when the value of <a href="../../Player.html#getRepeatMode()"><code>Player.getRepeatMode()</code></a> changes.

 <p><a href="../../Player.EventListener.html#onEvents(com.google.android.exoplayer2.Player,com.google.android.exoplayer2.Player.Events)"><code>Player.EventListener.onEvents(Player, Events)</code></a> will also be called to report this event along with
 other events that happen in the same <a href="https://developer.android.com/reference/android/os/Looper.html" title="class or interface in android.os" class="externalLink" target="_top"><code>Looper</code></a> message queue iteration.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../Player.EventListener.html#onRepeatModeChanged(int)">onRepeatModeChanged</a></code>&nbsp;in interface&nbsp;<code><a href="../../Player.EventListener.html" title="interface in com.google.android.exoplayer2">Player.EventListener</a></code></dd>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../Player.Listener.html#onRepeatModeChanged(int)">onRepeatModeChanged</a></code>&nbsp;in interface&nbsp;<code><a href="../../Player.Listener.html" title="interface in com.google.android.exoplayer2">Player.Listener</a></code></dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>repeatMode</code> - The <a href="../../Player.RepeatMode.html" title="annotation in com.google.android.exoplayer2"><code>Player.RepeatMode</code></a> used for playback.</dd>
</dl>
</li>
</ul>
</li>
</ul>
</section>
</li>
</ul>
</div>
</div>
</main>
<!-- ========= END OF CLASS DATA ========= -->
<footer role="contentinfo">
<nav role="navigation">
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a id="navbar.bottom">
<!--   -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a id="navbar.bottom.firstrow">
<!--   -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../../../index.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../../../../../allclasses.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
  allClassesLink = document.getElementById("allclasses_navbar_bottom");
  if(window==top) {
    allClassesLink.style.display = "block";
  }
  else {
    allClassesLink.style.display = "none";
  }
  //-->
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a id="skip.navbar.bottom">
<!--   -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
</nav>
</footer>
</body>
</html>
